//障碍自身控制
cc.Class({
    extends: cc.Component,

    properties: {
        //小鸟节点
        Bird_Node: {
            default: null,
            type: cc.Node,
            visible: false
        },
        //小鸟被撞音源
        Hit_Audio: {
            default: null,
            type: cc.AudioSource
        },
        //当前顶点
        Current_Top: {
            default: cc.Vec2(0,0),
            visible: false
        },
        //当前父节点随机的Y轴偏移量
        Random_Y: {
            default: 0,
            visible: false
        }

    },

    onLoad () {
        var manager = cc.director.getCollisionManager();
        manager.enabled = true;
        this.Bird_Node = Game.Self.Bird;
        this.Parent = this.node.parent;
    },

    onCollisionEnter (other,self){
        var collision = Game.StrShear(other.name,"<");
        //若当前碰撞的是小鸟，则停止游戏
        if(collision == "Bird") {
            Game.End = true;
            Game.BirdState = "Pipe";
            if (this.Check_Edge() == false) {
                this.Return_Top();
            }
            this.Hit_Audio.play();

        }
    },

    /*
        因为管理障碍的总节点PipeManager是一个大小为0的节点,并且它与Canvas的原点重合
        这时候位于第三级的子节点pipeBox、pipeUp、pipeDown的y轴与Canvas下的第一级节点[Game、Bird等]是一
        致的,即便将pipeBox、pipeUp、pipeDown中的某一个移出成为Canvas下的第一级节点,它们的y值仍是一致的
        唯一不一致的是x轴,不过要校正x轴也很简单,只需要加上pipeBox、pipeUp、pipeDown的父节点与PipeManager
        的横向偏移量即可,通过以上所描述,只需计算好偏移量,则当前障碍的顶部值不需要转换坐标系，就可以转化为与
        顶部(Up_Sky)和底部(Drop_Ground)一致的y值
    */
   //计算并返回当前顶点
    Return_Top () {
        var size_node = this.node.getContentSize();
        var top_world = cc.p(0,0); //顶部世界坐标
        var anchor = cc.p(0,0);  //获取当前锚点
        var name = this.node.name;
        anchor.x = this.node.anchorX;
        anchor.y = this.node.anchorY;
        //若当前节点是上方障碍,则顶部位置在最下方
        if(name == "pipeUp") {
            top_world.x = this.node.x;
            top_world.y = this.node.y - (size_node.height / 2);
            Game.UpTag = true;
            Game.UpNum = top_world.y - (this.Bird_Node.height / 2)
            if(this.Random_Y >= 0) {
                Game.UpNum += Math.abs(this.Random_Y);
            }else {
                Game.UpNum -= Math.abs(this.Random_Y);
            }
        }
        //若当前节点是下方障碍,则顶部位置在最上方
        if(name == "pipeDown") {
            top_world.x = this.node.x;
            top_world.y = this.node.y + (size_node.height / 2);
            Game.DropTag = true;
            Game.DropNum = top_world.y + (this.Bird_Node.height / 2);
            if(this.Random_Y >= 0) {
                Game.DropNum += Math.abs(this.Random_Y);
            }else {
                Game.DropNum -= Math.abs(this.Random_Y);
            }
        }
    },

    //检测小鸟是否撞到障碍边缘
    Check_Edge () {
        //小鸟恰好碰到障碍边缘时,小鸟横向中心到达障碍横向中心的总长度
        var len = this.Bird_Node.width / 2 + this.node.width / 2;
        var sub = Math.abs(this.node.parent.x) - len;
        //碰到左边缘
        if(sub <= 0 && sub > -5) {
            return true;
        }if(sub >= 0 && sub < 5) {  //鸟屁股碰到右边缘
            return true;
        }
        else {
            return false;
        }

    }
    
});
